package main

import (
	"flag"
	"fmt"
	"github.com/gin-gonic/gin"
	"os"
	"vote.zozoo.net/internal/routers"
	"vote.zozoo.net/pkg/cache"
	"vote.zozoo.net/pkg/config"
	"vote.zozoo.net/pkg/databases"
	"vote.zozoo.net/pkg/logger"
)

func main() {

	gin.SetMode(gin.ReleaseMode)       // 强制切换为生产模式[1,5](@ref)
	defaultEnv := os.Getenv("APP_ENV") // 读取系统环境变量，默认test

	// 解析命令行参数
	env := flag.String("env", defaultEnv, "Application environment (production, test, dev)")
	flag.Parse()

	//读取配置文件
	cfg, err := config.InitConfig(env)
	if err != nil {
		panic(err)
	}

	// 初始化日志
	logger.Init(&cfg.Log)

	logger.Info("Config loaded successfully. " + cfg.Server.Addr) // 使用 logger 记录信息

	//连接数据库
	gormDb, err := databases.InitGormDb(&cfg.Database)
	if err != nil {
		panic(err)
	}
	//连接缓存
	cache.InitRedis(&cfg.Cache.Redis)

	r := gin.New() // 不使用 gin.Default()，避免默认日志污染 logrus
	// 替换 Gin 日志
	r.Use(gin.LoggerWithConfig(gin.LoggerConfig{
		Output: logger.GetLogger().Out, // 让 Gin 访问日志输出到 logrus
	}))
	r.Use(gin.Recovery())

	// 斜杠自动重定向
	r.RedirectTrailingSlash = true

	// 加载模板文件（仅作测试）[可选]
	//r.LoadHTMLGlob("./web/templates/*.tmpl")

	// 路由注册
	routers.InitRouter(r, gormDb)

	//启动服务
	err = r.Run(":" + cfg.Server.Port)
	if err != nil {
		fmt.Println(err)
	}
}
